iT邦幫忙

0

[Golang]func的結構與特性整理-Part 1

  • 分享至 

  • xImage
  •  

一、結構
func name(InputParameter-list) (OutPutResult-list) {
function body
}
InputParameter: 輸入的變數
OutPutResult: 輸出的變數
輸出的變數,如果只有一個,可以省略()。下面有範例。

二、特性
在Go語言中,函數是一等(first-class)公民,函數類型也是一等的數據類型。

  1. 可變參數
    常用的 fmt.Println()之類的函數,就是可以接收可變長的參數。
    在類型的前面加上... (三個點)
package main

import (
	"fmt"
)

func Sum(ops ...int) int {
  sum := 0
  for _, ops := range ops {
    sum += ops
  }
  return sum
}

func main() {
  fmt.Println(Sum())
  fmt.Println(Sum(1))
  fmt.Println(Sum(1,2,3))
}

https://play.golang.org/p/JQMsgZsBOr-

  1. 多返回值
    可以用_ (下滑線),省略參數
package main

import (
	"fmt"
)

func Sum(ops ...int) (number, total int) {
  sum := 0
  num := 0
  for _, ops := range ops {
    num ++
    sum += ops
  }
  return num, sum
}

func main() {
  
  x, y := Sum()
  fmt.Println(x,y)

  _, y = Sum(1) //忽略第一個返回值
  fmt.Println(y)

  x, y = Sum(1,3,5)
  fmt.Println(x, y)
}

https://play.golang.org/p/dTYzJefJNxn

  1. 把函數當做值傳遞
    (函數做為值傳入和函數做為返回值)
package main

import (
	"fmt"
	"errors"
)

type operate func(x, y int) int

//輸入: 兩個int類型的變數,和一個operate類型的參數
//輸出: 一個int類型,和一個error類型的結果
func check(x int, y int, op operate) (int, error) {
	if op == nil { //檢查op的參數,是不是 nil
		return 0, errors.New("Invalid")
	}
	return op(x, y), nil
}

//Sum和operate的宣告方式一致
func Sum(a, b int) int {
  return a + b
}

func main() {
	x, y := 1, 2
	op := Sum

	result, err := check(x, y, op)
	fmt.Printf("Result: %d (error: %v)\n", result, err)

	result, err = check(x, y, nil)
	fmt.Printf("Result: %d (error: %v)\n", result, err)
}

https://play.golang.org/p/3-xXDTb89t2

參考來源:

Go语言核心36讲-郝林
https://www.flysnow.org/2017/03/31/go-in-action-go-method.html


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言